From: Jonas Dreßler Date: Sat, 20 Feb 2021 12:58:39 +0000 (+0100) Subject: keyboard: Correctly compare cursor rect to keyboard rect X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~122 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=36b103525c5e57900368211da86c377c0ca34852;p=gnome-shell.git keyboard: Correctly compare cursor rect to keyboard rect The logic that decides whether we should shift the window up when the cursor rectangle overlaps with the keyboard rectangle doesn't work properly right now, we want it to work like this: - If the currently focused window is shifted up, keep it shifted up until the cursor rect no longer overlaps the keyboard rect. To do that comparison correctly, we need to adjust for the height the cursor rect is shifted up by (keyboardHeight) and temporarily shift it down again. - If the currently focused is not shifted up, we want to shift it up as soon as the focus rect overlaps the keyboard rect. If that's not the case, want still want to call _setFocusWindow(null) in order to shift the previously focused window back down. This fixes two issues: 1) We're currently shifting windows back down at the wrong position of the cursor (that is y < keyboardHeight). 2) We're not shifting down previously focused windows when focusing a different window with the new focus in a specific region (y >= keyboardHeight && y + h < monitor.y + monitor.height - keyboardHeight). Part-of: --- diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index ce4f11fab..7452feaac 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -2014,11 +2014,19 @@ var Keyboard = GObject.registerClass({ let monitor = Main.layoutManager.keyboardMonitor; if (window && monitor) { - let keyboardHeight = Main.layoutManager.keyboardBox.height; + const keyboardHeight = Main.layoutManager.keyboardBox.height; + const keyboardY1 = (monitor.y + monitor.height) - keyboardHeight; - if (y + h >= monitor.y + monitor.height - keyboardHeight) + if (this._focusWindow === window) { + if (y + h + keyboardHeight < keyboardY1) + this._setFocusWindow(null); + + return; + } + + if (y + h >= keyboardY1) this._setFocusWindow(window); - else if (y < keyboardHeight) + else this._setFocusWindow(null); } else { this._setFocusWindow(null);